package com.zshan.clinic.admin.entity.medical.rx.base;

import com.zshan.clinic.admin.entity.vo.StockDrugProfileDetailVo;
import lombok.Data;

import java.math.BigDecimal;

/**
 * 成药处方明细
 * @author lichen
 */
@Data
public class RxDrugDetail extends StockDrugProfileDetailVo {

    /**
     * 用法:餐前服
     * 取数逻辑：1.取字典接口中中key为USAGE并且rxType=1(RxTypeEnum)的数据
     *         2.传给接口的为数据中的usageCode字段，前端显示的为数据中的usageName字段
     * */
    private String usageCode;

    /**
     * 用法中文
     */
    private String usageCodeText;

    /**
     *  频率;一天三次
     *  取数逻辑：1.取字典口中key=FREQUENCY的数据
     *           2.传给接口的为数据中的frequencyCode字段，前端显示的为数据中的frequencyName字段
     *
     * */
    private String frequencyCode;

    /**
     * 频率中文
     */
    private String frequencyCodeText;

    /** 单次用量;1;支持两位小数，四舍五入*/
    private BigDecimal dosage;

    /**
     *
     * 单次用量单位;片
     * 取数逻辑：1.先获取药品的min_pack_unit
     *          2.然后用药品的min_pack_unit取字典接口中key为UNIT并且unitType=1并且unitCode=min_pack_unit的数据
     *          3.传给接口的为数据中的unitCode字段，前端显示的为数据中的unitText字段
     * */
    private String dosageUnit;

    /**
     * 单次用量单位中文
     */
    private String dosageUnitText;

    /**
     * 周期数量;1
     *
     * */
    private Integer cycle;

    /**
     * 周期单位;天
     * 取数逻辑：1. 取frequencyCode对应的字典实体中的cycleUnit字段
     *          2. 传给接口的为数据中的cycleUnit字段，前端显示的为CycleUnitEnum中的text字段
     *
     *
     */
    private String cycleUnit;

    /**
     * 周期单位中文
     */
    private String cycleUnitText;

    /**
     * 备注;首次翻倍;多个用英文逗号分开
     * 取数逻辑：1.取字典口中key=REMARK的数据
     *         2.传给接口的为数据中的remarkText字段，前端显示的为数据中的remarkText字段，意思就是直接把文本给接口
     * */
    private String remark;

    /** 出库量;50;计算出来以后可以支持用户改动，以用户改动的为主
     * 计算逻辑：RxUtil.calculateTotalDose(detail.getDosage(), dictFrequencyVo.getFrequencyTimes(), rxInfusionGroup.getCycle(), stockDrugProfile.getIsMinSplit());
     * 写到这里的时候问后端要一下工具类的代码，用AI转成前端能用代码
     * 方法的参数说明：
     * 1.dosage 输入的用量
     * 2.frequencyTimes取匹配到的frequencyCode字典中的frequencyTimes
     * 3.cycle 输入的周期
     * 4.isMinSplit 药品的是否可以最小拆分，意思就是一次可以半片这种
     * */
    private Integer totalOutQty;

    /**
     *
     * 出库量单位;片
     * 取数逻辑：1.根据药品的isSplit字段如果为1取minPackUnitText如果为0取packUnitText，意思就是能拆开卖出库就是按片出，不能拆开卖就是按整盒出
     *          2.然后用药品的minPackUnit(或者packUnit)取字典接口中key为UNIT并且unitType=1并且unitCode=min_pack_unit的数据
     *          3.传给接口的为数据中的unitCode字段，前端显示的为数据中的unitText字段
     * */
    private String totalOutQtyUnit;

    /**
     * 出库量单位中文
     */
    private String totalOutQtyUnitText;


    /**
     * 成药处方中每个药品的小计
     * 取数逻辑：RxUtil.calculatePrice(totalOutQty,stockDrugProfile.getMinPackQty(),stockDrugProfile.getIsSplit(),stockDrugProfile.getPrice(),stockDrugProfile.getSplitPrice())
     * 参数说明：
     * 1.totalOutQty：取输入的totalOutQty字段
     * 2.minPackQty : 取药品的最小包装数：一盒有12片
     * 3.isSplit : 取药品的是否可以拆分
     * 4.price:取药品的整合的价格
     * 5.splitPrice : 取药品的单片的价格
     * */
    private Integer subtotal;
}
